#include<iostream>
#include<unistd.h>
#include<pthread.h>
#include<vector>
#include<string>
using namespace std;



#include<iostream>
#include<unistd.h>
#include<pthread.h>
#include<vector>
#include<string>
using namespace std;


string Hex(int data)
{
    char buff[1034] = {0};


    snprintf(buff,sizeof(buff),"0x%x",data);

    return buff;
}

void* mythread(void* args)
{

    int* i = (int*)args;
    
    while(true) 
    {
        sleep(1);  
        cout << "thread: " << *i  << endl;  
    }

    return (void*)100;
}

int main()
{

    vector<pthread_t> th;


    for(int i = 0; i < 4; i++)
    {
        pthread_t tid;  
       
        pthread_create(&tid, nullptr, mythread, &i);

        th.push_back(tid);
    }

    cout << "ready calcel" << endl;
    sleep(3); 


    for(int i = 0; i < th.size(); i++)
    {
        cout <<"calcel: thread "  << i <<endl;  
        pthread_cancel(th[i]); 

    sleep(1); 
    cout << "main return "<<endl; 

    return 0;  
}

// void* mythread(void* args)  // 线程函数
// {
//     // 子线程执行的操作，循环输出 "Child Thread is running ...."
//     for (int i = 0; i < 6; i++) 
//     {
//         sleep(1);  // 每次休眠1秒
//         cout << "Child Thread is running ...." << endl;
//     }

//     // 输出结束前的信息
//     cout << "Child  Pthread_exit" << endl;

//     // 使用 pthread_exit 显式退出线程并返回一个状态码 100
//     pthread_exit((void*)100);

//     // 这一行代码不会被执行到，因为 pthread_exit 已经退出线程
//     return (void*)100;
// }

// int main() 
// {
//     pthread_t tid;  // 声明一个线程标识符

//     // 创建线程
//     pthread_create(&tid, nullptr, mythread, nullptr);

//     // 主线程执行的操作
//     for (int i = 0; i < 6; i++) 
//     {
//         cout << "Main Thread is running .." << endl;
//         sleep(1);  // 每次休眠1秒
//     }

//     // 主线程休眠，确保子线程有时间执行
//     sleep(8);  // 等待子线程执行完毕

//     // 主线程结束前输出信息
//     cout << "main return " << endl;

//     return 0;  // 程序结束
// }




// // 子线程的执行函数
// void* mythread(void*args)
// {
//     // 循环6次，每次打印一次信息，并且每次暂停1秒
//     for(int i = 0 ; i < 6 ;i++) 
//     {
//         sleep(1);  // 休眠1秒钟
//         cout << "Child Thread is running ...." << endl;  // 输出子线程运行的提示
//     }

//     // 返回一个值100，并强制转换为 void* 类型
//     return (void*)100;
// }

// int main()
// {
//     pthread_t tid;  // 定义一个线程ID变量

//     // 创建子线程，传入 mythread 函数作为线程执行的函数，参数为 nullptr
//     pthread_create(&tid, nullptr, mythread, nullptr);

//     // 主线程运行6次，每次输出一次信息，并且每次暂停1秒
//     for(int i = 0 ; i < 6 ;i++) 
//     {
//         cout << "Main Thread is running .." << endl;  // 输出主线程运行的提示
//         sleep(1);  // 休眠1秒钟
//     }

//     void* retval;  // 声明一个指向 void 的指针，用于接收子线程的返回值

//     // 等待子线程结束，并将子线程的返回值存储到 retval 中
//     pthread_join(tid, &retval);

//     // 输出子线程的返回值，将其强制转换为整数类型并输出
//     cout << (int64_t)retval << endl;  // 输出子线程的返回值，转换为整数

//     return 0;
// }




// #include<iostream>
// #include<unistd.h>
// #include<pthread.h>
// #include<vector>
// #include<string>
// using namespace std;


// string Hex(int data)
// {
//     char buff[1034] = {0};

//     snprintf(buff,sizeof(buff),"0x%x",data);

//     return buff;
// } 


// void* mythread(void*args)
// {
//     pthread_detach(pthread_self());
//     int* i = (int*)args;
//     int n = 3;
//     while(n--)
//     {
//         sleep(1);
//         cout << "thread: " << *i  << endl;;
//     }
//     return (void*)100;
// }


// int main()
// {
    
//     vector<pthread_t> th;
//     cout << "线程的创建" <<endl;
//     for(int i = 0; i < 4;i++)
//     {
//         pthread_t tid;
//         pthread_create(&tid,nullptr,mythread,&i);
//         th.push_back(tid);
//     }
 
//     sleep(10);
//     cout << "main return "<<endl;
//     return 0;
// }



// int main()
// {
    
//     vector<pthread_t> th;
//     for(int i = 0; i < 4;i++)
//     {
//         pthread_t tid;
//         pthread_create(&tid,nullptr,mythread,&i);
//         th.push_back(tid);
//     }
//     cout << "ready calcel" << endl;
//     sleep(3);


//     for(int i = 0 ; i < th.size(); i++)
//     {
//         cout <<"calcel: thread "  << i <<endl;
//         pthread_cancel(th[i]);
//     }

//     sleep(1);
//     cout << "main return "<<endl;
//     return 0;
// }




// void* mythread(void*args)
// {
//     int* add = (int*)args;

//     cout <<"thread tid :"<< Hex(pthread_self());
//     printf("%p\n",add);

//     return (void*)100;
// }

// int main()
// {
    
//     vector<pthread_t> th;
//     for(int i = 0; i < 4;i++)
//     {
//         pthread_t tid;
//         pthread_create(&tid,nullptr,mythread,&i);
//         th.push_back(tid);
//         sleep(1);
//     }

//     //cout << "Main Thread is running .."<<endl;


//     // void* retval;
//     // for(int i = 0; i < th.size();i++)
//     // {
//     //     pthread_join(th[i],&retval);
//     // }



//     sleep(1);
//     cout << "main return "<<endl;
//     return 0;
// }